package edu.cicese.alz.tests;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.VerticalAlignment;
import org.jfree.util.UnitType;

import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;

public class AreaChartDemo1 extends ApplicationFrame
{

    public AreaChartDemo1(String s)
    {
        super(s);
        JPanel jpanel = createDemoPanel();
        jpanel.setPreferredSize(new Dimension(500, 270));
        setContentPane(jpanel);
    }

    private static CategoryDataset createDataset()
    {
        DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
        defaultcategorydataset.addValue(1.0D, "Series 1", "Type 1");
        defaultcategorydataset.addValue(4D, "Series 1", "Type 2");
        defaultcategorydataset.addValue(3D, "Series 1", "Type 3");
        defaultcategorydataset.addValue(5D, "Series 1", "Type 4");
        defaultcategorydataset.addValue(5D, "Series 1", "Type 5");
        defaultcategorydataset.addValue(7D, "Series 1", "Type 6");
        defaultcategorydataset.addValue(7D, "Series 1", "Type 7");
        defaultcategorydataset.addValue(8D, "Series 1", "Type 8");
        defaultcategorydataset.addValue(5D, "Series 2", "Type 1");
        defaultcategorydataset.addValue(7D, "Series 2", "Type 2");
        defaultcategorydataset.addValue(6D, "Series 2", "Type 3");
        defaultcategorydataset.addValue(8D, "Series 2", "Type 4");
        defaultcategorydataset.addValue(4D, "Series 2", "Type 5");
        defaultcategorydataset.addValue(4D, "Series 2", "Type 6");
        defaultcategorydataset.addValue(2D, "Series 2", "Type 7");
        defaultcategorydataset.addValue(1.0D, "Series 2", "Type 8");
        defaultcategorydataset.addValue(4D, "Series 3", "Type 1");
        defaultcategorydataset.addValue(3D, "Series 3", "Type 2");
        defaultcategorydataset.addValue(2D, "Series 3", "Type 3");
        defaultcategorydataset.addValue(3D, "Series 3", "Type 4");
        defaultcategorydataset.addValue(6D, "Series 3", "Type 5");
        defaultcategorydataset.addValue(3D, "Series 3", "Type 6");
        defaultcategorydataset.addValue(4D, "Series 3", "Type 7");
        defaultcategorydataset.addValue(3D, "Series 3", "Type 8");
        return defaultcategorydataset;
    }

    private static JFreeChart createChart(CategoryDataset categorydataset)
    {
        JFreeChart jfreechart = ChartFactory.createAreaChart("Area Chart", "Category", "Value", categorydataset, PlotOrientation.VERTICAL, true, true, false);
        jfreechart.setBackgroundPaint(Color.white);
        TextTitle texttitle = new TextTitle("An area chart demonstration.  We use this subtitle as an example of what happens when you get a really long title or subtitle.");
        texttitle.setFont(new Font("SansSerif", 0, 12));
        texttitle.setPosition(RectangleEdge.TOP);
        texttitle.setPadding(new RectangleInsets(UnitType.RELATIVE, 0.050000000000000003D, 0.050000000000000003D, 0.050000000000000003D, 0.050000000000000003D));
        texttitle.setVerticalAlignment(VerticalAlignment.BOTTOM);
        jfreechart.addSubtitle(texttitle);
        CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();
        categoryplot.setForegroundAlpha(0.5F);
        categoryplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
        categoryplot.setBackgroundPaint(Color.lightGray);
        categoryplot.setDomainGridlinesVisible(true);
        categoryplot.setDomainGridlinePaint(Color.white);
        categoryplot.setRangeGridlinesVisible(true);
        categoryplot.setRangeGridlinePaint(Color.white);
        CategoryAxis categoryaxis = categoryplot.getDomainAxis();
        categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
        categoryaxis.setLowerMargin(0.0D);
        categoryaxis.setUpperMargin(0.0D);
        categoryaxis.addCategoryLabelToolTip("Type 1", "The first type.");
        categoryaxis.addCategoryLabelToolTip("Type 2", "The second type.");
        categoryaxis.addCategoryLabelToolTip("Type 3", "The third type.");
        NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        numberaxis.setLabelAngle(0.0D);
        return jfreechart;
    }

    public static JPanel createDemoPanel()
    {
        JFreeChart jfreechart = createChart(createDataset());
        return new ChartPanel(jfreechart);
    }

    public static void main(String args[])
    {
        AreaChartDemo1 areachartdemo1 = new AreaChartDemo1("JFreeChart: AreaChartDemo1.java");
        areachartdemo1.pack();
        RefineryUtilities.centerFrameOnScreen(areachartdemo1);
        areachartdemo1.setVisible(true);
    }
}
